import axios from "axios";
import router from "@/router";
import element from "element-ui";

axios.defaults.headers.post["Content-Type"] = "application/json";
axios.defaults.headers.get["Content-Type"] = "application/json";
// 请求拦截器
axios.interceptors.request.use(
  function (config) {
    let token = sessionStorage.getItem("token");
    if (token) {
      config.headers.token = token; //将token放到请求头发送给服务器
      config.headers["Content-Type"] = "application/json";
      //这里经常搭配token使用，将token值配置到tokenkey中，将tokenkey放在请求头中
      // config.headers['token'] = Token;
      // config.headers.token的token是需要和后台定义叫什么的，我这里定义叫token了
    }
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);
// 响应拦截器
axios.interceptors.response.use(
  function (response) {
console.log(response);
    const code = response.data.code;
    // Do something with response data
    if(code===501){
      element.Message.info('请先登录')
      router.push('login')
    }else if(code ===403){
      element.Message.info('权限不足')
      router.push('403')
    }else if (code ==='503') {
      element.Message.info(response.data.msg)
      sessionStorage.removeItem("token")
      router.push('login')
    }else if(code === 504){
      element.Message.info(response.data.msg)
      sessionStorage.removeItem('token')
      router.push('login')
    }
    return response;
  },
  function (error) {
    console.log(error);
    //当token过期时，获取错误信息，并清除本地存储的过期token
    if (error.response.status == 401) {
      removeToken();
      router.push("/"); //跳转到登录组件
    } else if (error.response.status == 403) {
      element.Message("权限不足");
    }
    return Promise.reject(error);
  }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
  return new Promise((resolve, reject) => {
    axios
      ({
        method:'get',
        url,
        params,
        // headers:{}
      })
      .then((res) => {
        resolve(res.data);
      })
      .catch((err) => {
        reject(err.data);
      });
  });
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, params)
      .then((res) => {
        resolve(res.data);
      })
      .catch((err) => {
        reject(err.data);
      });
  });
}
